// 10.2将遍历路由的方法拿过来，去到 AsidseMenu 文件夹里面的 index.vue

import { useUserStore } from "@/store/UserStore/userStore";

// 11.37导入 router 文件这样就不需要导入 useRouter
// 11.46隐藏以下代码
// import { Router } from 'vue-router'

// 11.47直接导入 router 文件
import router from '@/router/index'



// 10.4这边我们要定义 userStore.routesList 的类型，所以我们使用重命名 list 约束类型
export function generateMenu(list: IMenuModel[]) {
  // 10.5这边也是改成 list
  // let level1: IModelWithChidren[] = userStore.routesList.filter(item => item.parentId === 0);
  // let level1: IModelWithChidren[] = list.filter(item => item.parentId === 0);


  let level1: IModelWithChidren[] = list.filter(item => item.parentId === 0);
  // 10.7这边深拷贝 pinia 的数据，这样每次进来的数据都是新数据


  level1 = JSON.parse(JSON.stringify(level1))

  // 10.6改成 list
  // userStore.routesList.forEach(child => {
  list.forEach(child => {
    level1.forEach(parent => {
      // 10.8这个时候，要进行不同的判断就自己调用方法的时候再判断
      // 10.9然后去到 AsidseMenu 文件夹里面的 index.vue
      // if (parent.id == child.parentId && child.hidden === 0) {
      if (parent.id == child.parentId) {
        if (!parent.children) {
          parent.children = []
        }
        parent.children.push(child)
      }
    })
  })
  return level1;
}

// 11.25 定义清除仓库的方法
export function clearPinia() {
  const userStore = useUserStore()
  // 11.26在这里面分别把所有的 pinia 里面的数据清空
  userStore.clearStore(
    // 11.27如果还有更多的 pinia ，后面继续调用清空方法就行
    // 11.28然后去到 TopHeader 文件夹里面的 index.vue
  )
}

// 11.38清除路由的方法
// export function clearRoutes(router: Router) {
// 11.48将 router 删掉
export function clearRoutes() {
  // 11.39定义仓库
  const userStore = useUserStore()
  // 11.40遍历所有的 pinia 里面的权限数据，根据 name 把路由删除
  userStore.routesList.forEach(item => {
    // 11.41删除路由
    // 11.42去到 TopHeader 文件夹里面的 index.vue
    router.removeRoute(item.name)
  })
}

// 11.45封装退出登录的方法
// export function logout(router: Router) {
// 11.49将 router 删除
// 11.50然后去到 TopHeader 文件夹里面的 index.ts
export function logout() {
  localStorage.removeItem('token')
  // 跳转登录页
  router.push('/login')
  // 清空路由
  clearRoutes()
  // 清空pinia
  clearPinia();
}

// 18.35封装一个格式化时间的方法
export function formateTime(time: string) {
  // 18.36因为有接口返回的数据可能没有，那就要判断
  if (!time) {
    return ''
  }
  // 18.37有的话格式化时间
  // 18.38然后去到 views 文件夹里面的 ums 文件夹里面的 admin.vue 里面
  return time.replace('T', ' ').substring(0, 19)
}

// 防抖
export function debounce(func: Function, delay: number) {
  let timer: ReturnType<typeof setTimeout>;
  return function (this: any, ...args: any[]) {
    const context = this;
    clearTimeout(timer);
    timer = setTimeout(() => {
      func.apply(context, args);
    }, delay);
    console.log("防抖");
  }
  
}
